package cc.rico.algorithm;

import org.apache.commons.lang3.ArrayUtils;

/**
 *
 * @Author: Dell
 * @Date: 2018/12/5
 * @Description:冒泡排序
 * 相邻的元素进行两两比较，顺序相反则进行交换，每一趟会将最小或最大的元素“浮”到顶端，最终达到完全有序
 */
public class Bubbling {

    public static void main(String[] args) {
        int[] items = new int[] {23, 22, 5, 6, 90, 43, 90, 1};
        PrintUtil.printArray(items);

        int[] sortUpItems = sortUp(items);
        PrintUtil.printArray(sortUpItems);

        int[] sortDownItems = sortDown(items);
        PrintUtil.printArray(sortDownItems);

    }

    private static int[] sortUp(int[] items) {
        if(ArrayUtils.isEmpty(items)) {
            return null;
        }

        for(int i=0; i<items.length-1; i++) {
            for(int j=1; j<items.length-i; j++) {
                if(items[j-1] > items[j]) {
                    int temp = items[j];
                    items[j] = items[j-1];
                    items[j-1] = temp;
                }
            }
            PrintUtil.printArray(items);
        }

        return items;
    }

    private static int[] sortDown(int[] items) {
        if(ArrayUtils.isEmpty(items)) {
            return null;
        }

        for(int i=0; i<items.length; i++) {
            for(int j=1; j<items.length-i; j++) {
                if(items[j] > items[j-1]) {
                    int temp = items[j-1];
                    items[j-1] = items[j];
                    items[j] = temp;
                }
            }

            PrintUtil.printArray(items);
        }

        return items;
    }
}
